package cn.org.gs.excel.controller;

import cn.org.gs.excel.entity.Info;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;

@Controller
public class TestController {

    @PostMapping("/exportData")
    public String exportPdf(Info info) throws Exception {
        PdfReader reader = new PdfReader("C:\\Users\\23399\\Desktop\\111.pdf");
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        PdfStamper ps = new PdfStamper(reader, bos);
        /**
         * 使用中文字体 使用 AcroFields填充值的不需要在程序中设置字体，在模板文件中设置字体为中文字体 Adobe 宋体 std L
         */
        AcroFields s = ps.getAcroFields();
        // 5给表单添加中文字体 这里采用系统字体。不设置的话，中文可能无法显示
        BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
                BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        s.addSubstitutionFont(bf);
        //设置key-value值
        //通过s.setFieldProperty("字段名", "textfont", BaseFont , null); 设置字段的格式或者在模板中修改样式
        Map<String, String> data = new HashMap<String, String>();
        data.put("Text1", info.getCommitTime());
        data.put("Text11", info.getDriver());
        data.put("Text23", info.getCarId());
        data.put("Text10", info.getCarType());
        data.put("Text7", info.getRepairAddress());
        // 7遍历data 给pdf表单表格赋值
        for (String key : data.keySet()) {
            s.setField(key,data.get(key).toString());
        }
        // 设为true
        ps.setFormFlattening(true);
        ps.close();
        //图片生成的地址（自己对应自己的地址，如果你电脑没有此路径，默认会创建的）
        FileOutputStream fos = new FileOutputStream("D:\\tupian\\pd.pdf");
        fos.write(bos.toByteArray());
        return null;
    }

    @GetMapping({"/", "index"})
    public String index(){
        return "index";
    }
}